<?php

/**
 * Storager:图片文件的存储方式
 * fs_storager是默认的存放方法,即将图片文件存放在images文件夹下
 */
class fs_storage
{

    function save($file, &$url, $type, $addons)
    {
        $id = $this->_get_ident($file, $type, $addons, $url, $path);
        if ($path && copy($file, $path)) {
            @unlink($file);
            @chmod($path, 0644);
            return $id;
        } else {
            return false;
        }
    }

    function replace($file, $id)
    {

        $path = MEDIA_DIR . $id;
        $dir = dirname($path);

        if (file_exists($path)) {
            if (!unlink($path)) {
                return false;
            }
        } elseif (!is_dir($dir)) {
            if (!mkdir_p($dir)) {
                return false;
            }
        }

        if ($path && rename($file, $path)) {
            return $id;
        } else {
            return false;
        }
    }

    function save_upload($file, &$url, $type, $addons)
    {
        $id = $this->_get_ident($file, $type, $addons, $url, $path);

        if ($path && move_uploaded_file($file, $path)) {
            @chmod($path, 0644);
            return $id;
        } else {
            return false;
        }
    }

    function _get_ident($file, $type, $addons, &$url, &$path)
    {

        $addons = implode('-', $addons);
        $dir = '/' . $type . '/' . date('Ymd') . '/';

        $uri = $dir . substr(md5(($addons ? $addons : $file) . microtime()), 0, 16) . ext_name(basename($addons ? $addons : $file));
        $path = MEDIA_DIR . $uri;
        $url = 'images' . $uri;

        if (file_exists($path) && !unlink($path)) {
            return false;
        }

        $dir = dirname($path);
        if (!is_dir($dir)) {
            if (!mkdir_p($dir)) {
                return false;
            }
        }

        return $uri;
    }

    function remove($id)
    {
        if ($id && file_exists(MEDIA_DIR . '/' . $id)) {
            return @unlink(MEDIA_DIR . '/' . $id);
        } else {
            return true;
        }
    }

    function getFile($id)
    {
        if ($id && file_exists(MEDIA_DIR . '/' . $id)) {
            return MEDIA_DIR . '/' . $id;
        } else {
            return true;
        }
    }

}